/**
 * Copyright (C) 2025 by Fonoster Inc (https://fonoster.com)
 * http://github.com/fonoster/fonoster
 *
 * This file is part of Fonoster
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *    https://opensource.org/licenses/MIT
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { EmailParams, SmsParams } from "@fonoster/common";

enum ContactType {
  EMAIL = "EMAIL",
  PHONE = "PHONE"
}

type SendVerificationCodeRequest = {
  contactType: ContactType;
  value: string;
};

type VerifyCodeRequest = {
  username: string;
  contactType: ContactType;
  value: string;
  verificationCode: string;
};

type VerificationParams = {
  templateDir?: string;
  recipient: string;
  verificationCode: string;
};

type SendEmailVerificationCode = (
  sendEmail: (params: EmailParams) => Promise<void>,
  request: VerificationParams
) => Promise<void>;

type SendPhoneVerificationCode = (
  sendSms: (params: SmsParams) => Promise<void>,
  request: VerificationParams
) => Promise<void>;

export {
  ContactType,
  SendEmailVerificationCode,
  SendPhoneVerificationCode,
  SendVerificationCodeRequest,
  VerificationParams,
  VerifyCodeRequest
};
